package br.ufpe.cin.rgms.linhasdepesquisa.modelo;

import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

import org.hibernate.annotations.CollectionOfElements;

import br.ufpe.cin.rgms.base.AbstractBusinessEntity;
import br.ufpe.cin.rgms.membro.modelo.Membro;
import br.ufpe.cin.rgms.publicacao.modelo.Publicacao;

@Entity
public class LinhaPesquisa extends AbstractBusinessEntity {
	
	private String titulo;
	
	private String breveDescricao;
	
	private String descricaoDetalhada;
	
	private List<String> financiadores;
	
	private List<String> linksRelacionados;
	
	private List<Membro> membros;
	
	private List<Publicacao> publicacoes;
	
	
	public LinhaPesquisa() {
		// TODO Auto-generated constructor stub
	}

	public LinhaPesquisa(String titulo, String breveDescricao,
			String descricaoDetalhada, List<String> financiadores,
			List<String> linksRelacionados, List<Membro> membros,
			List<Publicacao> publicacoes) {
		super();
		
		this.setTitulo(titulo);
		this.setBreveDescricao(breveDescricao);
		this.setDescricaoDetalhada(descricaoDetalhada);
		this.setFinanciadores(financiadores);
		this.setLinksRelacionados(linksRelacionados);
		this.setMembros(membros);
		this.setPublicacoes(publicacoes);
	}

	@Basic
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	@Basic
	public String getBreveDescricao() {
		return breveDescricao;
	}

	public void setBreveDescricao(String breveDescricao) {
		this.breveDescricao = breveDescricao;
	}

	@Basic
	public String getDescricaoDetalhada() {
		return descricaoDetalhada;
	}

	public void setDescricaoDetalhada(String descricaoDetalhada) {
		this.descricaoDetalhada = descricaoDetalhada;
	}

	@CollectionOfElements
	public List<String> getFinanciadores() {
		return financiadores;
	}

	public void setFinanciadores(List<String> financiadores) {
		this.financiadores = financiadores;
	}

	@CollectionOfElements
	public List<String> getLinksRelacionados() {
		return linksRelacionados;
	}

	public void setLinksRelacionados(List<String> linksRelacionados) {
		this.linksRelacionados = linksRelacionados;
	}

	@ManyToMany
	@JoinTable(
			name="Membro_LinhaPesquisa",
	        joinColumns=@JoinColumn(name="membro_id"),
	        inverseJoinColumns=@JoinColumn(name="linha_pesquisa_id")
	)
	public List<Membro> getMembros() {
		return membros;
	}

	public void setMembros(List<Membro> membros) {
		this.membros = membros;
	}

	@ManyToMany
	@JoinTable(
			name="Membro_LinhaPesquisa",
	        joinColumns=@JoinColumn(name="publicacao_id"),
	        inverseJoinColumns=@JoinColumn(name="linha_pesquisa_id")
	)
	public List<Publicacao> getPublicacoes() {
		return publicacoes;
	}

	public void setPublicacoes(List<Publicacao> publicacoes) {
		this.publicacoes = publicacoes;
	}
}
